package com.hsgene.order.service;

import com.hsgene.common.util.result.ApiResult;
import com.hsgene.common.util.result.NullObject;
import com.hsgene.common.util.support.LimitHelper;
import com.hsgene.common.util.support.OrderHelper;
import com.hsgene.common.util.support.Pagination;
import com.hsgene.common.util.support.PeanutPagination;
import com.hsgene.order.condition.DistributeOrderCondition;
import com.hsgene.order.condition.QueryTestingProductOrderCondition;
import com.hsgene.order.condition.SettlementCondition;
import com.hsgene.order.condition.SettlementExportCondition;
import com.hsgene.order.domain.OrderPackage;
import com.hsgene.order.domain.OrderPackageDetail;
import com.hsgene.order.domain.PlatformOrderDto;
import com.hsgene.order.domain.v1.*;
import com.hsgene.order.dto.console.*;
import com.hsgene.order.dto.console.detail.OrderBaseInfo;
import com.hsgene.order.dto.v1.OrderSettlementDto;
import com.hsgene.user.domain.DoctorDto;
import com.hsgene.user.dto.address.AddressDetails;

import java.util.List;
import java.util.Map;

/**
 * @desc:
 * @author: 江承良
 * @date: 2018/9/26 14:14
 */
public interface ConsoleOrderService {

    /**
     * 运营后台订单列表查询
     *
     * @param condition   检测套餐订单查询条件
     * @param limitHelper 分页条件
     * @param sortType    排序类型
     * @return
     */
    ApiResult<Pagination<ConsoleOrderDto>> queryConsoleOrders(QueryTestingProductOrderCondition condition,
                                                              LimitHelper limitHelper, String sortType);

    /**
     * 超期检测订单列表查询
     *
     * @param condition   查询条件
     * @param orderHelper 排序参数
     * @param limitHelper 分页参数
     * @return 超期检测订单列表
     */
    ApiResult<Pagination<PostponeTestingOrderDto>> queryPostponeOrders(QueryTestingProductOrderCondition condition, OrderHelper orderHelper, LimitHelper limitHelper);

    /**
     * @param signDto 标记状态
     * @param orderId 订单id
     * @param userId  用户id
     * @return void
     * @description 更新套餐订单标记状态
     * @author maodi
     * @createDate 2018/11/1 16:30
     */
    void updateOrderSign(SignDto signDto, String orderId, String userId);

    /**
     * @param orderId 订单id
     * @return com.hsgene.order.dto.console.SignDto
     * @description 根据订单id获取订单标记信息
     * @author maodi
     * @createDate 2019/1/17 11:05
     */
    SignDto getSignInfo(String orderId);

    /**
     * @param lock    锁定状态
     * @param orderId 订单id
     * @param userId  用户id
     * @return void
     * @description 更新套餐订单锁定状态
     * @author maodi
     * @createDate 2018/11/1 16:47
     */
    void updateOrderLock(Integer lock, String orderId, String userId);

    /**
     * 线下付款弹窗信息
     *
     * @param id 订单id
     * @return
     */
    ApiResult underLinePaymentInfo(String id);

    /**
     * 保存线下收款填写的信息并更改订单状态
     *
     * @param geneticTestingOrderAddtionB
     * @return
     */
    ApiResult updateTestingOrder(GeneticTestingOrderAddtionB geneticTestingOrderAddtionB, String userId);

    /**
     * 付款待分配订单列表
     *
     * @param condition 查询条件
     * @return
     */
    ApiResult distributeOrders(DistributeOrderCondition condition);

    /**
     * @Description 待分配订单详情
     * @Author jcl
     * @CreateDate 2018/10/16 17:35
     * @Param id 订单id
     * @Return
     */
    ApiResult distributeOrderDetail(String id);

    /***
     * @Description 为订单分配地服
     * @Author jcl
     * @CreateDate 2018/10/18 15:38
     * @Param distributorId 分配人id
     * @Param assigneeId 地服id
     * @Return
     */
    ApiResult distributeDifu(String orderId, String distributorId, String assigneeId);

    /**
     * @param platformOrder 订单信息
     * @param userId        用户id
     * @return void
     * @description 修改平台订单信息
     * @author maodi
     * @createDate 2018/11/5 14:14
     */
    int updatePlatformOrder(PlatformOrderDto platformOrder, String userId);

    /**
     * @param orderId 订单id
     * @return int
     * @description 查询当前订单是否在待地管确认状态 ~ 发票待确认状态之间（包含临界值）
     * @author maodi
     * @createDate 2018/11/5 16:03
     */
    int isStatus(String orderId);

    /**
     * @param orderId 订单id
     * @return int
     * @description 查询订单医生是否已经修改
     * @author maodi
     * @createDate 2018/11/6 9:19
     */
    int queryIsChangedDoctor(String orderId);

    /***
     * 平台端确认样本弹窗信息获取
     * @author jcl
     * @date 2018/11/8 15:38
     * @param orderId 订单id
     * @return
     */
    ApiResult sampleConfirmInfo(String orderId);

    /***
     * 确认样本
     * @author jcl
     * @date 2018/11/8 17:13
     * @param orderId 订单d
     * @param userId 确认人id
     * @return
     */
    ApiResult sampleConfirm(String orderId, String userId, List<OrderSampleConfirmDto> params);

    /**
     * 后台确认报告
     *
     * @param geneticTestingOrder
     * @param userId
     * @return
     * @author FX
     * @date 2018/11/8 14:56
     */
    ApiResult confirmationReport(GeneticTestingOrder geneticTestingOrder, String userId);

    /***
     * 平台订单地管确认
     * @author jcl
     * @date 2018/11/9 9:39
     * @param orderId 订单id
     * @param confirm 审核内容
     * @param userId 用户id
     * @return
     */
    ApiResult groundManageConfirm(String orderId, Map<String, Object> confirm, String userId);

    /***
     * 订单的套餐信息
     * @author jcl
     * @date 2018/11/13 10:54
     * @param orderId 订单id
     * @return
     */
    ApiResult orderPackages(String orderId);

    /***
     * 获取机构寄送的物品
     * @author jcl
     * @date 2018/12/21 17:42
     * @param orderId 订单id
     * @param packageId 套餐id
     * @return
     */
    ApiResult orderPackageSendItems(String orderId, String packageId);

    /***
     * 平台端签收材料
     * @author jcl
     * @date 2018/11/13 11:31
     * @param orderPackageSign
     * @return
     */
    ApiResult<NullObject> orderPackageSign(GeneticTestingOrderPackageSign orderPackageSign, String userId);

    /**
     * 寄送材料至地服
     *
     * @param delivery 快递信息
     * @return 操作结果
     */
    ApiResult<NullObject> deliveryToGroundServant(GeneticTestingExpressDelivery delivery);

    /**
     * 查询订单当前地服的收货地址列表
     *
     * @param orderId 订单id
     * @return 收货地址列表
     */
    ApiResult<List<AddressDetails>> queryOrderServantAddress(String orderId);

    /**
     * 修改成本
     *
     * @param orderPackage
     * @return
     * @author FX
     * @date 2018/11/14 14:18
     */
    ApiResult updateCost(OrderPackage orderPackage);

    /***
     * 结算列表
     * @author jcl
     * @date 2018/11/13 17:47
     * @param condition
     * @return
     */
    ApiResult orderSettlementPage(SettlementCondition condition);

    /**
     * 获取导出信息
     *
     * @param exportCondition 导出信息id
     * @return
     */
    List<OrderSettlementDto> getExportInfoByIds(SettlementExportCondition exportCondition);

    /**
     * j结算
     *
     * @param orderPackage
     * @return
     */
    ApiResult settleAccounts(OrderPackage orderPackage);

    /**
     * 批量结算
     *
     * @param orderPackage
     * @return
     * @author FX
     * @date 2018/11/15 13:46
     */
    ApiResult batchSettlement(List<OrderPackage> orderPackage);

    /**
     * @param orderId 订单id
     * @return com.hsgene.order.dto.console.OrderUpdateDto
     * @description 根据订单id获取订单修改信息
     * @author maodi
     * @createDate 2018/11/27 14:15
     */
    OrderUpdateDto queryOrderUpdate(String orderId);

    /**
     * 获取结算列表
     *
     * @param con
     * @return
     */
    List<OrderSettlementDto> getOrderSettlements(SettlementCondition con);

    /**
     * 结算成本更新
     *
     * @param dataList
     */
    Boolean updateSettlementInfo(List<Map<String, Object>> dataList);

    /***
     * 订单详情
     * @author jcl
     * @date 2018/11/27 15:36
     * @param orderId 订单id
     * @return
     */
    ApiResult<OrderBaseInfo> consoleOrderDetail(String orderId);

    /**
     * 平台寄送给用户
     *
     * @param delivery
     * @return
     * @author FX
     * @date 2018/11/29 14:12
     */
    ApiResult<NullObject> sendToUser(GeneticTestingExpressDelivery delivery);

    /**
     * 处理自动收货提醒消息
     *
     * @param orderId 订单id
     * @return 处理结果
     */
    ApiResult<NullObject> handleAutoReceiptMsg(String orderId);

    /**
     * 获取收货人地址
     *
     * @param adressId
     * @return
     * @author FX
     * @date 2018/12/7 13:52
     */
    ApiResult<UserMallAddress> getUserMallAdress(String adressId);

    /***
     * 变更套餐
     * @author jcl
     * @date 2019/1/16 14:45
     * @param orderReplacePackageDtos 变更套餐信息
     * @param orderId 订单id
     * @param userId 用户id
     * @return
     */
    ApiResult replaceOrderPackage(List<OrderReplacePackageDto> orderReplacePackageDtos, String orderId, String userId);

    /**
     * @param userId   地服id
     * @param name     医生姓名
     * @param phone    医生电话
     * @param pageNo   页数
     * @param pageSize 每页数量
     * @return com.hsgene.common.util.support.PeanutPagination
     * @description 根据地服id，电话，姓名获取医生信息
     * @author maodi
     * @createDate 2019/1/9 14:56
     */
    PeanutPagination queryDoctorByHttp(String userId, String name, String phone, int pageNo, int pageSize);

    /**
     * @param userId 地服id
     * @return java.util.List<com.hsgene.user.domain.DoctorDto>
     * @description 根据地服id获取医生信息
     * @author maodi
     * @createDate 2019/1/9 18:27
     */
    List<DoctorDto> queryDoctorByHttpNoPage(String userId);

    /**
     * 平台上传报告
     *
     * @param orderPackageDetail
     * @param userId
     * @return
     * @author FX
     * @date 2019/1/21 15:51
     */
    ApiResult uploadReport(List<OrderPackageDetail> orderPackageDetail, String orderId, String userId);

    /**
     * 备注超期检测订单
     *
     * @param postponeInfo 超期检测信息
     * @param operatorId   操作人id
     * @return 备注结果
     */
    ApiResult<NullObject> remarkPostponeOrder(PostponeTestingOrderDto postponeInfo, String operatorId);
}
